/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package net.javahispano.nettools.cliente.Grafico;

import java.awt.*;
import java.awt.event.*;
import com.sun.java.swing.*;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeCellRenderer;

class java1415 extends JPanel {
  private JTree arbol;
  private JScrollPane panelScro;
/*
  public java1415() {
    setLayout( new BorderLayout() );

    // Creamos los datos que van a componer el árbol
    DefaultMutableTreeNode raiz = new DefaultMutableTreeNode( "Palos" );
    DefaultMutableTreeNode selCopas = new DefaultMutableTreeNode( "Copas" );
    creaPalos( selCopas );
    raiz.add( selCopas );
    DefaultMutableTreeNode selOros = new DefaultMutableTreeNode( "Oros" );
    creaPalos( selOros );
    raiz.add( selOros );
    DefaultMutableTreeNode selEspadas = new DefaultMutableTreeNode( "Espadas" );
    creaPalos( selEspadas );
    raiz.add( selEspadas );
    DefaultMutableTreeNode selBastos = new DefaultMutableTreeNode( "Bastos" );
    creaPalos( selBastos );
    raiz.add( selBastos );
    // Creamos un nuevo controlador para el árbol
    DefaultTreeModel modeloArbol = new DefaultTreeModel( raiz );
    arbol = new JTree( modeloArbol );
    // Indicamos que el árbol va a estar controlado por nuestra aplicación
    // y que el sistema nos debe dejar el campo libre
    arbol.setCellRenderer( new MiRendererDeArbol() );
    // Añadimos el árbol a un panel de desplazamiento para no tener que
    // ocuparnos de controlar la NO visibilidad de alguna zona del árbol
    // al desplegarse las ramas
    panelScro = new JScrollPane();
    panelScro.getViewport().add( arbol );
    add( panelScro, BorderLayout.CENTER );
  }*/

  // Este método permite escribir el conjunto de cartas que componen
  // cada "palo" de la baraja sobre el nodo actual del árbol
  public void creaPalos( DefaultMutableTreeNode baraja ) {
    baraja.add( new DefaultMutableTreeNode( "As" ) );
    baraja.add( new DefaultMutableTreeNode( "Dos" ) );
    baraja.add( new DefaultMutableTreeNode( "Tres" ) );
    baraja.add( new DefaultMutableTreeNode( "Cuatro" ) );
    baraja.add( new DefaultMutableTreeNode( "Cinco" ) );
    baraja.add( new DefaultMutableTreeNode( "Seis" ) );
    baraja.add( new DefaultMutableTreeNode( "Siete" ) );
    baraja.add( new DefaultMutableTreeNode( "Sota" ) );
    baraja.add( new DefaultMutableTreeNode( "Caballo" ) );
    baraja.add( new DefaultMutableTreeNode( "Rey" ) );
  }


  // Esta es la clase que va a permitir personalizar la presentación
  // de cada una de las ramas del árbol, de forma que no solamente
  // tengamos el texto correspondiente a la carta, o palo de la
  // baraja, sino un icono mostrando su imagen
  public class MiRendererDeArbol extends JLabel implements TreeCellRenderer {
    private ImageIcon imgBaraja;
    private ImageIcon[] imgPalos;
    private ImageIcon[] imgCartas;
    private boolean seleccionado;

    public MiRendererDeArbol() {
      // Cargamos las imgenes de las cartas
      imgBaraja = new ImageIcon( "_palos.gif" );
      imgPalos = new ImageIcon[4];
      imgPalos[0] = new ImageIcon( "_copas.gif" );
      imgPalos[1] = new ImageIcon( "_oros.gif" );
      imgPalos[2] = new ImageIcon( "_espadas.gif" );
      imgPalos[3] = new ImageIcon( "_bastos.gif" );
      imgCartas = new ImageIcon[10];
      imgCartas[0] = new ImageIcon( "_as.gif" );
      imgCartas[1] = new ImageIcon( "_dos.gif" );
      imgCartas[2] = new ImageIcon( "_tres.gif" );
      imgCartas[3] = new ImageIcon( "_cuatro.gif" );
      imgCartas[4] = new ImageIcon( "_cinco.gif" );
      imgCartas[5] = new ImageIcon( "_seis.gif" );
      imgCartas[6] = new ImageIcon( "_siete.gif" );
      imgCartas[7] = new ImageIcon( "_diez.gif" );
      imgCartas[8] = new ImageIcon( "_once.gif" );
      imgCartas[9] = new ImageIcon( "_doce.gif" );
    }

    public Component getTreeCellRendererComponent( JTree arbol,
      Object valor,boolean seleccionado,boolean expandido,
      boolean rama,int fila,boolean conFoco ) {
      // Hay que encontrar el nodo en que estamos y coger el
      // texto que contiene

      DefaultMutableTreeNode nodo = (DefaultMutableTreeNode)valor;
      String texto = (String)nodo.getUserObject();
      this.seleccionado = seleccionado;
      // Se fija el color de fondo en función de que esté o no
      // seleccionada la celda del árbol
      if( !seleccionado )
	setForeground( Color.black );
      else
	setForeground( Color.white );
      // Fijamos el icono que corresponde al texto de la celda, para
      // presentar la imagen de la carta que corresponde a esa celda
      if( texto.equals( "Palos" ) )
	setIcon( imgBaraja );
      else if( texto.equals( "Copas" ) )
	setIcon( imgPalos[0] );
      else if( texto.equals( "Oros" ) )
	setIcon( imgPalos[1] );
      else if( texto.equals( "Espadas" ) )
	setIcon( imgPalos[2] );
      else if( texto.equals( "Bastos" ) )
	setIcon( imgPalos[3] );
      else if( texto.equals( "As" ) )
	setIcon( imgCartas[0] );
      else if( texto.equals( "Dos" ) )
	setIcon( imgCartas[1] );
      else if( texto.equals( "Tres" ) )
	setIcon( imgCartas[2] );
      else if( texto.equals( "Cuatro" ) )
	setIcon( imgCartas[3] );
      else if( texto.equals( "Cinco" ) )
	setIcon( imgCartas[4] );
      else if( texto.equals( "Seis" ) )
	setIcon( imgCartas[5] );
      else if( texto.equals( "Siete" ) )
	setIcon( imgCartas[6] );
      else if( texto.equals( "Sota" ) )
	setIcon( imgCartas[7] );
      else if( texto.equals( "Caballo" ) )
	setIcon( imgCartas[8] );
      else if( texto.equals( "Rey" ) )
	setIcon( imgCartas[9] );

      // A continuación del icono, ponemos el texto
      setText( texto );

      return( this);
    }

    // Sobreescribimos el método paint() para fijar el color de
    // fondo. Normalmente, un JLabel puede pintar su propio fondo,
    // pero, seguramente debido aparentemente a un bug, o a una
    // limitación en el TreeCellRenderer, es necesario recurrir
    // al método paint() para hacer esto
    public void paint( Graphics g ) {
      Color color;
      Icon currentI = getIcon();

      // Fijamos el colos de fondo
      color = seleccionado ? Color.red : Color.white;
      g.setColor( color );
      // Rellenamos el rectángulo que ocupa el texto sobre la
      // celda del árbol
      g.fillRect( 0,0,getWidth()-1,getHeight()-1 );

      super.paint( g );
    }
  }

/*
  public static void main( String args[] ) {
    JFrame ventana = new JFrame( "Tutorial de Java, Swing" );

    ventana.addWindowListener( new WindowAdapter() {
      public void windowClosing( WindowEvent evt ){
	System.exit( 0 );
      }
    } );
    ventana.getContentPane().add( new java1415(),BorderLayout.CENTER );
    ventana.setSize( 200,400 );

    ventana.setVisible( true );
  }
 */
}

//------------------------------------------ Final del fichero java1415.java